package microservice.demo.servicecomb.course.helloservice.bootevent;

import org.apache.servicecomb.core.BootListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class CustomBootEventListener implements BootListener {
  private static final Logger LOGGER = LoggerFactory.getLogger(CustomBootEventListener.class);

  /**
   * 此方法监听的是{@link EventType#AFTER_REGISTRY}事件。
   * 当微服务实例启动完成，初次注册到服务中心时，会触发此事件。如果业务系统有在微服务完成启动时触发执行初始化操作等的需要，可以监听此事件。
   */
  @Override
  public void onAfterRegistry(BootEvent event) {
    LOGGER.info("====== Service startup completed! ======");
  }

  /**
   * 此方法监听的是{@link EventType#BEFORE_CLOSE}事件。
   * 在JVM进程即将结束运行，触发shutdown hook的时候会触发此事件。如果微服务有退出清理前的操作要做，可以监听此事件。
   * 注意：此事件的触发依赖于JVM shutdown hook的触发，所以并不是在所有情况下都会运行。
   */
  @Override
  public void onBeforeClose(BootEvent event) {
    LOGGER.info("====== JVM process is closing! ======");
  }
}
